package models;

import java.util.Collection;

import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

import net.sf.oval.constraint.ValidateWithMethod;
import play.data.validation.Required;
import play.db.jpa.Model;
import controllers.Perfils;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Perfil extends Model {
	
	private static final long serialVersionUID = -4389909139722129414L;

	@OneToMany
	private Collection<Alimento> alimentosDesagradables;
	
	@OneToOne(mappedBy="perfil")
	private Paciente paciente;
	
	@ValidateWithMethod(methodName = "validarMailAlternativoSugerencias", parameterType = String.class, message = "perfil.mailAlternativoSugerencias.mailInvalido")
	private String mailAlternativoSugerencias;
	
	@Required(message = "formato.requerido")
	private String nombreApellidoPerfil;
	
	private String habilitarSugerencias;
	
	@Enumerated(EnumType.STRING)
	private FrecuenciaSugerencias frecuenciaSugerencias;

	private Boolean recibePromos;
	
	public boolean validarMailAlternativoSugerencias(String mailAlternativoSugerencias) {
		if (this.habilitarSugerencias.equals("No"))
			return true;
		
		if (mailAlternativoSugerencias == null)
			return false;
		
		if ("".equals(mailAlternativoSugerencias))
			return false;
		
		if (!Perfils.validateMail(mailAlternativoSugerencias))
			return false;
		
		return true;
	}
	
	public Perfil(Paciente paciente) {
		super();
		this.paciente = paciente;
		this.mailAlternativoSugerencias = paciente.getEmail();
		this.habilitarSugerencias = "No";
		this.nombreApellidoPerfil = paciente.getNombre();
		paciente.setPerfil(this);
	}
	
	public Perfil(Paciente paciente, String mailAlternativoSugerencias, String habilitarSugerencias,
			FrecuenciaSugerencias frecuenciaSugerencias) {
		super();
		this.paciente = paciente;
		this.mailAlternativoSugerencias = mailAlternativoSugerencias;
		this.habilitarSugerencias = habilitarSugerencias;
		this.frecuenciaSugerencias = frecuenciaSugerencias;
		paciente.setPerfil(this);
	}
	
	public Collection<Alimento> getAlimentosDesagradables() {
		return alimentosDesagradables;
	}
	
	public void setAlimentosDesagradables(Collection<Alimento> alimentosDesagradables) {
		this.alimentosDesagradables = alimentosDesagradables;
	}
	
	public static Perfil findPerfil(Long modelCurrentUserId) {
		
		Paciente paciente = Paciente.findById(modelCurrentUserId);
		
		return paciente.getPerfil();
	}
	
	public Paciente getPaciente() {
		return paciente;
	}
	
	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}
	
	public String getMailAlternativoSugerencias() {
		return mailAlternativoSugerencias;
	}
	
	public void setMailAlternativoSugerencias(String mailAlternativoSugerencias) {
		this.mailAlternativoSugerencias = mailAlternativoSugerencias;
	}
	
	public FrecuenciaSugerencias getFrecuenciaSugerencias() {
		return frecuenciaSugerencias;
	}
	
	public void setFrecuenciaSugerencias(FrecuenciaSugerencias frecuenciaSugerencias) {
		this.frecuenciaSugerencias = frecuenciaSugerencias;
	}
	
	public String getHabilitarSugerencias() {
		return habilitarSugerencias;
	}
	
	public void setHabilitarSugerencias(String habilitarSugerencias) {
		this.habilitarSugerencias = habilitarSugerencias;
	}
	
	public String getNombreApellidoPerfil() {
		return nombreApellidoPerfil;
	}
	
	public void setNombreApellidoPerfil(String nombreApellidoPerfil) {
		this.nombreApellidoPerfil = nombreApellidoPerfil;
	}

	public Boolean getRecibePromos() {
		return recibePromos;
	}

	public void setRecibePromos(Boolean recibePromos) {
		this.recibePromos = recibePromos;
	}
	
}
